/**
 * @Copyright: 2019 姑苏区政府大数据中心. All rights reserved.
 *
 * All rights Reserved, Designed By 姑苏区政府大数据中心
 */
package com.acp.service.impl;

import com.acp.dao.acpo.UploadFileMapper;
import com.acp.model.UploadFile;
import com.acp.result.JsonData;
import com.acp.result.PageResult;
import com.acp.service.UploadFileService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.io.File;
import java.util.List;

/**
 * @version V1.0
 * @Copyright: 2019 姑苏区政府大数据中心. All rights reserved.
 * @Title: UploadFileServiceImpl
 * @Package
 * @Description:
 * @author: 张逍
 * @date: Created in 2019/7/24 3:14 PM
 * All rights Reserved, Designed By 姑苏区政府大数据中心
 */
@Service
@Transactional( rollbackFor = Exception.class)
public class UploadFileServiceImpl implements UploadFileService {

    @Resource
    private UploadFileMapper uploadFileMapper;

    /**
     * Description 新增
     * @Author 张逍
     * @Date 2019/7/24
     * @param record
     * @return int
     */
    @Override
    public JsonData insert(UploadFile record) {
        uploadFileMapper.insert(record);
        return JsonData.success(null, 906);
    }

    /**
     * Description 删除
     * @Author 张逍
     * @Date 2019/7/24
     * @param record
     * @return int
     */
    @Override
    public JsonData delete(List<UploadFile> record) {
        record.forEach(uploadFile -> uploadFile.setDelFlag("1"));
        int i = uploadFileMapper.delete(record);
        if (i > 0) {
            // 如果数据库删除成功, 则删除文件
            record.forEach(file ->  deleteFolder(file.getFilePath()+file.getFileName()));
        }

        return null;
    }

    /**
     * Description 根据条件查询列表, 分页
     * @Author 张逍
     * @Date 2019/7/24
     * @param record
     * @return java.util.List<com.acp.model.UploadFile>
     */
    @Override
    public PageResult selectFileList(UploadFile record) {
        if (record != null && record.getFileName() != null) {
            record.setFileName(record.getFileName().replace("%", "\\%"));
        }
        // 分页插件
        PageHelper.startPage(record.getPageNum(), record.getPageSize());
        List<UploadFile> list = uploadFileMapper.selectFileList(record);
        PageInfo<UploadFile> pageInfo = new PageInfo<>(list);
        // 记录总条数
        long count = pageInfo.getTotal();
        return PageResult.success(list, count);
    }


    /**
     * @Description  根据路径删除指定的目录或文件，无论存在与否
     * @Author 张逍
     * @Date 2019/7/26
     * @param sPath 要删除的目录或文件
     * @return boolean  删除成功返回 true，否则返回 false。
     */
    public boolean deleteFolder(String sPath) {
        boolean flag = false;
        File file = new File(sPath);
        // 判断目录或文件是否存在
        if (!file.exists()) {
            // 不存在返回 false
            return flag;
        } else {
            // 判断是否为文件
            if (file.isFile()) {
                // 为文件时调用删除文件方法
                return deleteFile(sPath);
            }
            return flag;
        }
    }


    /**
     * 删除单个文件
     * @param   sPath    被删除文件的文件名
     * @return 单个文件删除成功返回true，否则返回false
     */
    public boolean deleteFile(String sPath) {
        boolean flag = false;
        File file = new File(sPath);
        // 路径为文件且不为空则进行删除
        if (file.isFile() && file.exists()) {
            file.delete();
            flag = true;
        }
        return flag;
    }
}
